#include "ControleurCourbe.h"
#include "SDL.h"
#include <iostream>

using namespace std;

ControleurCourbe::ControleurCourbe(Ecran * e)
{
    ecran = e;
    origine = e->getOrigine();
    degre = 0;
    boucle();

}

void ControleurCourbe::cleanEcran()
{
    ecran->setCouleurFond(ecran->getCouleur(255,255,255));
    ecran->drawRepere();
    ecran->drawLine(Point(0,ecran->getHauteur()/2),Point(ecran->getLargeur(),ecran->getHauteur()/2));
    ecran->drawLine(Point(ecran->getLargeur()/2,0),Point(Point(ecran->getLargeur()/2,ecran->getHauteur())));
}

void ControleurCourbe::boucle()
{

    cout << "Hello" << endl;

    SDL_Event event;
    while (true)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {

            case SDL_QUIT:
                exit(0);
            break;

            case SDL_MOUSEBUTTONDOWN:
            {
                courbeAnt = courbe;
                Point p(event.button.x - origine.x  , origine.y - event.button.y);
                ecran->drawBiggerPixel(p,4);

                tabP.push_back(p);

                if(degre >= 1)
                {
                    Vecteur * tVect = new Vecteur[degre + 1];
                    cleanEcran();

                    for(unsigned int i = 0 ; i < tabP.size() ; i ++)
                    {
                        tVect[i] = Vecteur(tabP[i].x , tabP[i].y);
                        ecran->drawBiggerPixel(tabP[i]);
                    }


                    courbe = Courbe(degre,tVect);

                    ecran->drawCourbe(courbe);
                    cout << courbe.getDegre() << endl;
                }
                degre++;
            }
            break;

            case SDL_KEYDOWN:
            {
                switch (event.key.keysym.sym)
                {
                    case SDLK_UP: /* Appui sur la touche FLECHE_HAUT */
                    {
                        courbeAnt = courbe;

                        degre++;
                        courbe = courbe++;
                        cleanEcran();
                        tabP.clear();

                        Vecteur * v = courbe.getVecteur();

                        for(int i = 0 ; i < degre  ; i++)
                            tabP.push_back(Point(v[i].x,v[i].y));

                        ecran->drawCourbe(courbe);

                        for(unsigned int i = 0 ; i < tabP.size() ; i ++)
                            ecran->drawBiggerPixel(tabP[i]);
                    }
                    break;

                    case SDLK_DOWN: /* Appui sur la touche FLECHE_BAS */
                    {
                        courbeAnt = courbe;

                        degre--;
                        courbe = courbe--;
                        cleanEcran();
                        tabP.clear();

                        Vecteur * v = courbe.getVecteur();

                        for(int i = 0 ; i < degre  ; i++)
                            tabP.push_back(Point(v[i].x,v[i].y));

                        ecran->drawCourbe(courbe);

                        for(unsigned int i = 0 ; i < tabP.size() ; i ++)
                            ecran->drawBiggerPixel(tabP[i]);
                    }
                    break;

                    case SDLK_BACKSPACE: /* Appui sur la touche RETOUR_ARRIERE */
                    {
                        courbe = courbeAnt;

                        degre = courbe.getDegre();

                        cleanEcran();
                        tabP.clear();

                        Vecteur * v = courbe.getVecteur();

                        for(int i = 0 ; i < degre  ; i++)
                            tabP.push_back(Point(v[i].x,v[i].y));

                        ecran->drawCourbe(courbe);

                        for(unsigned int i = 0 ; i < tabP.size() ; i ++)
                            ecran->drawBiggerPixel(tabP[i]);
                    }
                    break;

                    case SDLK_ESCAPE: /* Appui sur la touche ECHAP */
                    {
                        exit(1);
                    }
                    break;

                    default:
                        ;
                    break;
                }
            }
            break;
        }
    }
}


